package sgs.common.utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;

/**
 * 配置管理器枚举，用于全局配置的读取和管理。
 * 通过单例模式提供配置项的获取。
 *
 * @author yaenli
 * @since 2024-06-12
 */
public enum Config {
    INSTANCE;// 配置管理器的单例实例
    private Properties props;
    private String configPath = System.getProperty("config.path", "application.properties");

    Config() {
        loadConfig();
    }

    /**
     * 加载配置文件。
     * 如果加载失败，将记录日志并抛出运行时异常。
     *
     * @return Properties 对象，包含加载的配置项。
     */
    private Properties loadConfig() {
        props = new Properties();
        try (FileInputStream fis = new FileInputStream(configPath)) {
            props.load(fis);
        } catch (IOException e) {
            Logger.log(Level.SEVERE, "Failed to load configuration :" + configPath, e);
            throw new RuntimeException("Failed to load configuration", e);
        }
        return props;
    }

    /**
     * 根据键获取配置项的值。
     *
     * @param key 配置项的键。
     * @return 配置项的值，如果键不存在则返回null。
     */
    public String getProperty(String key) {
        return props.getProperty(key);
    }

}
